package com.atguigu.bigdata.scala.chapter05

object Scala07_Function_Hell_4 {

    def main(args: Array[String]): Unit = {

        // TODO 函数式编程 - 地狱


        def a( x:Int, y:Int ): Int = {
            x + y
        }
        def b( x:Int, y:Int ): Int = {
            x * y
        }

        // val f = sum _
        def test( f : (Int, Int)=>Int ): Unit = {

            val result = f(10, 20)
            println(result)
        }
        println("*************************************")
        def test2( f : (String)=>Unit ): Unit = {
            f("zhangsan")
        }

        def fun2( s : String ): Unit = {
            println(s)
        }

        test2( fun2 )
        test2( (s:String)=>{println(s)} )
        // 匿名函数的使用也可以遵循至简原则
        // 1. 如果匿名函数的逻辑代码只有一行，那么大括号可以省略
        test2( (s:String)=>println(s) )
        // 2. 如果匿名函数的参数类型可以推断出来，那么参数类型可以省略
        test2( (s)=>println(s) )
        // 3. 如果匿名函数的参数列表的个数为1，那么小括号可以省略
        test2( s=>println(s) )
        // 4. 如果匿名函数的逻辑代码中，参数按照顺序只使用一次的话，那么可以采用特殊符号代替 ： 下划线
        test2( println(_) )
        // 5.
        test2( println )


    }
}
